skills = skills_df['Skill'].tolist()
skills_closed = skills + [skills[0]]
market_values = skills_df['Market_Demand'].tolist() + [skills_df['Market_Demand'].tolist()[0]]
mishal_values = skills_df['Mishal'].tolist() + [skills_df['Mishal'].tolist()[0]]
almas_values = skills_df['Almas'].tolist() + [skills_df['Almas'].tolist()[0]]
fig1 = go.Figure()
fig1.add_trace(go.Scatterpolar(
r=market_values,
theta=skills_closed,
fill='toself',
name='π Market Demand',
line=dict(color='#636EFA', width=3),
fillcolor='rgba(99, 110, 250, 0.15)',
opacity=0.9
))
fig1.add_trace(go.Scatterpolar(
r=mishal_values,
theta=skills_closed,
fill='toself',
name='π©βπ» Mishal',
line=dict(color='#EF553B', width=2.5),
fillcolor='rgba(239, 85, 59, 0.2)',
opacity=0.85
))
fig1.add_trace(go.Scatterpolar(
r=almas_values,
theta=skills_closed,
fill='toself',
name='π¨βπ» Almas',
line=dict(color='#00CC96', width=2.5),
fillcolor='rgba(0, 204, 150, 0.2)',
opacity=0.85
))
fig1.update_layout(
polar=dict(
radialaxis=dict(
visible=True,
range=[0, 100],
tickfont=dict(size=10, color='#666'),
gridcolor='rgba(0,0,0,0.1)',
linecolor='rgba(0,0,0,0.1)'
),
angularaxis=dict(
tickfont=dict(size=11, color='#333', family='Arial'),
gridcolor='rgba(0,0,0,0.08)',
linecolor='rgba(0,0,0,0.1)',
rotation=90,
direction='clockwise'
),
bgcolor='rgba(250,250,250,0.5)'
),
title=dict(
text='<b>Skill Proficiency vs Market Demand</b><br><sup>Mishal & Almas | BU Applied Business Analytics</sup>',
font=dict(size=18, color='#2c3e50', family='Arial Black'),
x=0.5,
y=0.95
),
legend=dict(
orientation='h',
yanchor='bottom',
y=-0.15,
xanchor='center',
x=0.5,
font=dict(size=12),
bgcolor='rgba(255,255,255,0.8)',
bordercolor='rgba(0,0,0,0.1)',
borderwidth=1
),
template='plotly_white',
height=650,
width=800,
margin=dict(t=100, b=80, l=80, r=80)
)
fig1.write_image('figures/skill_gap_radar.png', scale=2)
fig1.show()
print("π Skill Gap Analysis Summary")
print("-" * 50)
print(skills_df.to_string(index=False))